package service

import (
	"errors"
	"goscan-mgt/model"
	"goscan-mgt/repository"
	"goscan-mgt/utils"
)

// ServiceInfoService 提供与服务信息相关的业务逻辑
type ServiceInfoService struct {
	repo *repository.ServiceInfoRepository
}

// NewServiceInfoService 创建一个新的 ServiceInfoService 实例
func NewServiceInfoService() *ServiceInfoService {
	repo := repository.NewServiceInfoRepository() // 获取服务信息仓库实例
	return &ServiceInfoService{repo: repo}
}

// CreateServiceInfo 创建新的服务信息
func (s *ServiceInfoService) CreateServiceInfo(serviceInfo *model.ServiceInfo) error {
	if serviceInfo.Port == 0 || serviceInfo.Service == "" {
		return errors.New("端口和服务名称不能为空")
	}
	return s.repo.Create(serviceInfo)
}

// GetServiceInfoByID 根据ID获取服务信息
func (s *ServiceInfoService) GetServiceInfoByID(id uint) (*model.ServiceInfo, error) {
	return s.repo.FindByID(id)
}

// UpdateServiceInfo 更新服务信息
func (s *ServiceInfoService) UpdateServiceInfo(serviceInfo *model.ServiceInfo) error {
	if serviceInfo.ID == 0 {
		return errors.New("服务信息ID不能为空")
	}
	return s.repo.Update(serviceInfo)
}

// DeleteServiceInfo 删除服务信息
func (s *ServiceInfoService) DeleteServiceInfo(id uint) error {
	return s.repo.Delete(id)
}

// GetAllServiceInfo 获取所有服务信息
func (s *ServiceInfoService) GetAllServiceInfo() ([]model.ServiceInfo, error) {
	return s.repo.FindAll()
}

// GetPaginatedServiceInfo 获取分页服务信息列表
func (s *ServiceInfoService) GetPaginatedServiceInfo(page, pageSize int) (*utils.Pagination[model.ServiceInfo], error) {
	return s.repo.GetPaginated(page, pageSize)
}
